home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / source / thesource6.dms / thesource6.adf / Source / StartUpCode / Demo_Inc.lha / demo.i
Encoding:
Text File  |  1993-05-26  |  15.9 KB  |  519 lines

  1. ***********************************************************
  2. * $VER: demo_i 1.6
  3. * Revision history:
  4. * 1.6:
  5. *    Added full support for all ECS registers and fixed about
  6. *    four incorrect chip offsets.
  7. *
  8. * 1.5:
  9. *    Added further blitter support with new equates and with
  10. *    the new BlitCon and BlitSize macros.
  11. *    Added several ECS chip registers.
  12. *
  13. * 1.4:
  14. *    Added option for NOMACROS by SETing NOMACROS to non-zero.
  15. *
  16. * 1.3: 
  17. *    Fixed error in conditional assembly.
  18. *
  19. * 1.2:
  20. *    name changed from 'custom.i' to 'demo.i' to avoid confusion
  21. *    lf codes were added (thanks to howtocode5.txt!)
  22. *
  23. * 1.1:
  24. *    cop2lc address was corrected
  25. *    WaitVblank and WaitBlitter macros were added
  26. *
  27. * 1.0:
  28. *    Initial release
  29. ***********************************************************
  30. * Setup for NOMACROS
  31.  
  32.  IFND        NOMACROS
  33. NOMACROS    SET    0
  34.  ENDC
  35.  
  36. * Custom chip register addresses *
  37. Custom        equ    $dff000    ; Custom chips base address
  38.  
  39.         rsreset
  40. bltddat        rs.w    1    ; Blitter Destination Data (DMA only)
  41. dmaconr        rs.w    1    ; DMA Enable Read
  42. vposr        rs.w    1    ; Vertical Beam Position Read
  43. vhposr        rs.w    1    ; Vert/Horiz Beam Position Read
  44. dskdatr        rs.w    1    ; Disk Data Read (DMA only)
  45. joy0dat        rs.w    1    ; Joystick/Mouse Port 0 Data (read)
  46. joy1dat        rs.w    1    ; Joystick/Mouse Port 1 Data (read)
  47. clxdat        rs.w    1    ; Collision Data (read)
  48. adkconr        rs.w    1    ; Audio/Disk Control Read
  49. pot0dat        rs.w    1    ; Pot Port 0 Data Read
  50. pot1dat        rs.w    1    ; Pot Port 1 Data Read
  51. potgor        rs.w    1    ; Pot Port Data Read
  52. serdatr        rs.w    1    ; Serial Data Input and Status Read
  53. dskbytr        rs.w    1    ; Disk Data Byte and Disk Status Read
  54. intenar        rs.w    1    ; Interrupt Enable (read)
  55. intreqr        rs.w    1    ; Interrupt Request (read)
  56. dskpt        rs.w    0    ; Disk Pointer (write)
  57. dskpth        rs.w    1
  58. dskptl        rs.w    1
  59. dsklen        rs.w    1    ; Disk Data Length
  60. dskdat        rs.w    1    ; Disk DMA Write
  61. refptr        rs.w    1    ; Refresh Pointer (write) DON'T USE!
  62. vposw        rs.w    1    ; Vert Beam Position Write DON'T USE!
  63. vhposw        rs.w    1    ; Vert/Horiz Beam Pos Write DON'T USE!
  64. copcon        rs.w    1    ; Coprocessor Control
  65. serdat        rs.w    1    ; Serial Data Output (write)
  66. serper        rs.w    1    ; Serial Period & Data Bit Control (write)
  67. potgo        rs.w    1    ; Pot Port Data (write)
  68. joytest        rs.w    1    ; JOY0DAT and JOY1DAT Write
  69. strequ        rs.w    1    ; Short Frame Vertical Strobe
  70. strvbl        rs.w    1    ; Normal Vertical Blank Stobe
  71. strhor        rs.w    1    ; Horizontal Sync Strobe
  72. strlong        rs.w    1    ; Long Raster Strobe
  73. bltcon0        rs.w    1    ; Blitter Control Register 0 (write)
  74. bltcon1        rs.w    1    ; Blitter Control Register 1 (write)
  75. bltafwm        rs.w    1    ; Source A First Word Mask (write)
  76. bltalwm        rs.w    1    ; Source A Last Word Mask (write)
  77. bltcpt        rs.w    0    ; Blitter Source C Pointer (write)
  78. bltcpth        rs.w    1
  79. bltcptl        rs.w    1
  80. bltbpt        rs.w    0    ; Blitter Source B Pointer (write)
  81. bltbpth        rs.w    1
  82. bltbptl        rs.w    1
  83. bltapt        rs.w    0    ; Blitter Source A Pointer (write)
  84. bltapth        rs.w    1
  85. bltaptl        rs.w    1
  86. bltdpt        rs.w    0    ; Blitter Destination Pointer (write)
  87. bltdpth        rs.w    1
  88. bltdptl        rs.w    1
  89. bltsize        rs.w    1    ; Blitter Start and Size (write)
  90. bltcon0l    rs.w    1    ; just write the lf values of bltcon0 (write ecs)
  91. bltsizv        rs.w    1    ; Blitter V size (write ecs)
  92. bltsizh        rs.w    1    ; Blitter start and H size (write ecs)
  93. bltcmod        rs.w    1    ; Blitter Source C Modulo (write)
  94. bltbmod        rs.w    1    ; Blitter Source B Modulo (write)
  95. bltamod        rs.w    1    ; Blitter Source A Modulo (write)
  96. bltdmod        rs.w    1    ; Blitter Destination Modulo (write)
  97.         rs.w    1    ; unused
  98.         rs.w    1    ; unused
  99.         rs.w    1    ; unused
  100.         rs.w    1    ; unused
  101. bltcdat        rs.w    1    ; Blitter Source C Data (write)
  102. bltbdat        rs.w    1    ; Blitter Source B Data (write)
  103. bltadat        rs.w    1    ; Blitter Source A Data (write)
  104.         rs.w    1    ; unused
  105.         rs.w    1    ; unused
  106.         rs.w    1    ; unused
  107. deniseid    rs.w    1    ; Chip revision level for Denise (read ecs)
  108. dsksync        rs.w    1    ; Disk Sync Pattern (write)
  109. cop1lc        rs.w    0    ; Copper Program Counter 1 (write)
  110. cop1lch        rs.w    1
  111. cop1lcl        rs.w    1
  112. cop2lc        rs.w    0    ; Copper Program Counter 2 (write)
  113. cop2lch        rs.w    1
  114. cop2lcl        rs.w    1
  115. copjmp1        rs.w    1    ; Copper Jump Strobe 1
  116. copjmp2        rs.w    1    ; Copper Jump Strobe 2
  117. copins        rs.w    1    ; Copper Instruction Identity (write)
  118. diwstrt        rs.w    1    ; Display Window Start (write)
  119. diwstop        rs.w    1    ; Display Window Stop (write)
  120. ddfstrt        rs.w    1    ; Display Data Fetch Start (write)
  121. ddfstop        rs.w    1    ; Display Data Fetch Stop (write)
  122. dmacon        rs.w    1    ; DMA Control (write)
  123. clxcon        rs.w    1    ; Collision Control (write)
  124. intena        rs.w    1    ; Interrupt Enable (write)
  125. intreq        rs.w    1    ; Interrupt Request (write)
  126. adkcon        rs.w    1    ; Audio/Disk Control (write)
  127. aud0lc        rs.w    0    ; Channel 0 Waveform Address (write)
  128. aud0lch        rs.w    1
  129. aud0lcl        rs.w    1
  130. aud0len        rs.w    1    ; Channel 0 Waveform Length (write)
  131. aud0per        rs.w    1    ; Channel 0 Period (write)
  132. aud0vol        rs.w    1    ; Channel 0 Volume (write)
  133. aud0dat        rs.w    1    ; Channel 0 Data (write)
  134.         rs.w    1    ; unused
  135.         rs.w    1    ; unused
  136. aud1lc        rs.w    0    ; Channel 1 Waveform Address (write)
  137. aud1lch        rs.w    1
  138. aud1lcl        rs.w    1
  139. aud1len        rs.w    1    ; Channel 1 Waveform Length (write)
  140. aud1per        rs.w    1    ; Channel 1 Period (write)
  141. aud1vol        rs.w    1    ; Channel 1 Volume (write)
  142. aud1dat        rs.w    1    ; Channel 1 Data (write)
  143.         rs.w    1    ; unused
  144.         rs.w    1    ; unused
  145. aud2lc        rs.w    0    ; Channel 2 Waveform Address (write)
  146. aud2lch        rs.w    1
  147. aud2lcl        rs.w    1
  148. aud2len        rs.w    1    ; Channel 2 Waveform Length (write)
  149. aud2per        rs.w    1    ; Channel 2 Period (write)
  150. aud2vol        rs.w    1    ; Channel 2 Volume (write)
  151. aud2dat        rs.w    1    ; Channel 2 Data (write)
  152.         rs.w    1    ; unused
  153.         rs.w    1    ; unused
  154. aud3lc        rs.w    0    ; Channel 3 Waveform Address (write)
  155. aud3lch        rs.w    1
  156. aud3lcl        rs.w    1
  157. aud3len        rs.w    1    ; Channel 3 Waveform Length (write)
  158. aud3per        rs.w    1    ; Channel 3 Period (write)
  159. aud3vol        rs.w    1    ; Channel 3 Volume (write)
  160. aud3dat        rs.w    1    ; Channel 3 Data (write)
  161.         rs.w    1    ; unused
  162.         rs.w    1    ; unused
  163. bpl1pt        rs.w    0    ; Bitplane 1 Pointer (write)
  164. bpl1pth        rs.w    1
  165. bpl1ptl        rs.w    1
  166. bpl2pt        rs.w    0    ; Bitplane 2 Pointer (write)
  167. bpl2pth        rs.w    1
  168. bpl2ptl        rs.w    1
  169. bpl3pt        rs.w    0    ; Bitplane 3 Pointer (write)
  170. bpl3pth        rs.w    1
  171. bpl3ptl        rs.w    1
  172. bpl4pt        rs.w    0    ; Bitplane 4 Pointer (write)
  173. bpl4pth        rs.w    1
  174. bpl4ptl        rs.w    1
  175. bpl5pt        rs.w    0    ; Bitplane 5 Pointer (write)
  176. bpl5pth        rs.w    1
  177. bpl5ptl        rs.w    1
  178. bpl6pt        rs.w    0    ; Bitplane 6 Pointer (write)
  179. bpl6pth        rs.w    1
  180. bpl6ptl        rs.w    1
  181.         rs.w    1    ; unused
  182.         rs.w    1    ; unused
  183.         rs.w    1    ; unused
  184.         rs.w    1    ; unused
  185. bplcon0        rs.w    1    ; Bitplane Control Register 0 (write)
  186. bplcon1        rs.w    1    ; Bitplane Control Register 1 (write)
  187. bplcon2        rs.w    1    ; Bitplane Control Register 2 (write)
  188. bplcon3        rs.w    1    ; Bitplane Control Register 3 (write ecs)
  189. bpl1mod        rs.w    1    ; Bitplane Modulo 1 (write)
  190. bpl2mod        rs.w    1    ; Bitplane Modulo 2 (write)
  191.         rs.w    1    ; unused
  192.         rs.w    1    ; unused
  193. bpl1dat        rs.w    1    ; Bitplane Data Register 1 (write)
  194. bpl2dat        rs.w    1    ; Bitplane Data Register 2 (write)
  195. bpl3dat        rs.w    1    ; Bitplane Data Register 3 (write)
  196. bpl4dat        rs.w    1    ; Bitplane Data Register 4 (write)
  197. bpl5dat        rs.w    1    ; Bitplane Data Register 5 (write)
  198. bpl6dat        rs.w    1    ; Bitplane Data Register 6 (write)
  199.         rs.w    1    ; unused
  200.         rs.w    1    ; unused
  201. spr0pt        rs.w    0    ; Sprite Pointer 0 (write)
  202. spr0pth        rs.w    1
  203. spr0ptl        rs.w    1
  204. spr1pt        rs.w    0    ; Sprite Pointer 1 (write)
  205. spr1pth        rs.w    1
  206. spr1ptl        rs.w    1
  207. spr2pt        rs.w    0    ; Sprite Pointer 2 (write)
  208. spr2pth        rs.w    1
  209. spr2ptl        rs.w    1
  210. spr3pt        rs.w    0    ; Sprite Pointer 3 (write)
  211. spr3pth        rs.w    1
  212. spr3ptl        rs.w    1
  213. spr4pt        rs.w    0    ; Sprite Pointer 4 (write)
  214. spr4pth        rs.w    1
  215. spr4ptl        rs.w    1
  216. spr5pt        rs.w    0    ; Sprite Pointer 5 (write)
  217. spr5pth        rs.w    1
  218. spr5ptl        rs.w    1
  219. spr6pt        rs.w    0    ; Sprite Pointer 6 (write)
  220. spr6pth        rs.w    1
  221. spr6ptl        rs.w    1
  222. spr7pt        rs.w    0    ; Sprite Pointer 7 (write)
  223. spr7pth        rs.w    1
  224. spr7ptl        rs.w    1
  225. spr0pos        rs.w    1    ; Sprite Position 0 (write)
  226. spr0ctl        rs.w    1    ; Sprite Control 0 (write)
  227. spr0data    rs.w    1    ; Sprite Data A Register 0 (write)
  228. spr0datb    rs.w    1    ; Sprite Data B Register 0 (write)
  229. spr1pos        rs.w    1    ; Sprite Position 1 (write)
  230. spr1ctl        rs.w    1    ; Sprite Control 1 (write)
  231. spr1data    rs.w    1    ; Sprite Data A Register 1 (write)
  232. spr1datb    rs.w    1    ; Sprite Data B Register 1 (write)
  233. spr2pos        rs.w    1    ; Sprite Position 2 (write)
  234. spr2ctl        rs.w    1    ; Sprite Control 2 (write)
  235. spr2data    rs.w    1    ; Sprite Data A Register 2 (write)
  236. spr2datb    rs.w    1    ; Sprite Data B Register 2 (write)
  237. spr3pos        rs.w    1    ; Sprite Position 3 (write)
  238. spr3ctl        rs.w    1    ; Sprite Control 3 (write)
  239. spr3data    rs.w    1    ; Sprite Data A Register 3 (write)
  240. spr3datb    rs.w    1    ; Sprite Data B Register 3 (write)
  241. spr4pos        rs.w    1    ; Sprite Position 4 (write)
  242. spr4ctl        rs.w    1    ; Sprite Control 4 (write)
  243. spr4data    rs.w    1    ; Sprite Data A Register 4 (write)
  244. spr4datb    rs.w    1    ; Sprite Data B Register 4 (write)
  245. spr5pos        rs.w    1    ; Sprite Position 5 (write)
  246. spr5ctl        rs.w    1    ; Sprite Control 5 (write)
  247. spr5data    rs.w    1    ; Sprite Data A Register 5 (write)
  248. spr5datb    rs.w    1    ; Sprite Data B Register 5 (write)
  249. spr6pos        rs.w    1    ; Sprite Position 6 (write)
  250. spr6ctl        rs.w    1    ; Sprite Control 6 (write)
  251. spr6data    rs.w    1    ; Sprite Data A Register 6 (write)
  252. spr6datb    rs.w    1    ; Sprite Data B Register 6 (write)
  253. spr7pos        rs.w    1    ; Sprite Position 7 (write)
  254. spr7ctl        rs.w    1    ; Sprite Control 7 (write)
  255. spr7data    rs.w    1    ; Sprite Data A Register 7 (write)
  256. spr7datb    rs.w    1    ; Sprite Data B Register 7 (write)
  257. color00        rs.w    1    ; Color Register 0 (write)
  258. color01        rs.w    1    ; Color Register 1 (write)
  259. color02        rs.w    1    ; Color Register 2 (write)
  260. color03        rs.w    1    ; Color Register 3 (write)
  261. color04        rs.w    1    ; Color Register 4 (write)
  262. color05        rs.w    1    ; Color Register 5 (write)
  263. color06        rs.w    1    ; Color Register 6 (write)
  264. color07        rs.w    1    ; Color Register 7 (write)
  265. color08        rs.w    1    ; Color Register 8 (write)
  266. color09        rs.w    1    ; Color Register 9 (write)
  267. color10        rs.w    1    ; Color Register 10 (write)
  268. color11        rs.w    1    ; Color Register 11 (write)
  269. color12        rs.w    1    ; Color Register 12 (write)
  270. color13        rs.w    1    ; Color Register 13 (write)
  271. color14        rs.w    1    ; Color Register 14 (write)
  272. color15        rs.w    1    ; Color Register 15 (write)
  273. color16        rs.w    1    ; Color Register 16 (write)
  274. color17        rs.w    1    ; Color Register 17 (write)
  275. color18        rs.w    1    ; Color Register 18 (write)
  276. color19        rs.w    1    ; Color Register 19 (write)
  277. color20        rs.w    1    ; Color Register 20 (write)
  278. color21        rs.w    1    ; Color Register 21 (write)
  279. color22        rs.w    1    ; Color Register 22 (write)
  280. color23        rs.w    1    ; Color Register 23 (write)
  281. color24        rs.w    1    ; Color Register 24 (write)
  282. color25        rs.w    1    ; Color Register 25 (write)
  283. color26        rs.w    1    ; Color Register 26 (write)
  284. color27        rs.w    1    ; Color Register 27 (write)
  285. color28        rs.w    1    ; Color Register 28 (write)
  286. color29        rs.w    1    ; Color Register 29 (write)
  287. color30        rs.w    1    ; Color Register 30 (write)
  288. color31        rs.w    1    ; Color Register 31 (write)
  289. htotal        rs.w    1    ; Highest number count, horiz line (VARBEAMEN=1) (write ecs)
  290. hsstop        rs.w    1    ; Horiz line pos for HSYNC stop (write ecs)
  291. hbstrt        rs.w    1    ; Horiz line pos for HBLANK start (write ecs)
  292. hbstop        rs.w    1    ; Horiz line pos for HBLANK stop (write ecs)
  293. vtotal        rs.w    1    ; Highest number count, vert line (VARBEAMEN=1) (write ecs)
  294. vsstop        rs.w    1    ; Vert line pos for VSYNC stop (write ecs)
  295. vbstrt        rs.w    1    ; Vert line pos for VBLANK start (write ecs)
  296. vbstop        rs.w    1    ; Vert line pos for VBLANK stop (write ecs)
  297.         rs.w    1    ; unused
  298.         rs.w    1    ; unused
  299.         rs.w    1    ; unused
  300.         rs.w    1    ; unused
  301.         rs.w    1    ; unused
  302.         rs.w    1    ; unused
  303. beamcon0    rs.w    1    ; Video Beam Control 0 (write ecs) (write ecs)
  304. hsstrt        rs.w    1    ; Horiz sync start (VARHSY) (write ecs)
  305. vsstrt        rs.w    1    ; Vert sync start  (VARVSY) (write ecs)
  306. hcenter        rs.w    1    ; Horiz pos for Vsync on interlace (write ecs)
  307. diwhigh        rs.w    1    ; display window - upper bits for strt & stop (write ecs)
  308.  
  309. ***********************************************************
  310. * CIA addresses *
  311.  
  312. CIAA        rs.w    $bfe001    ; CIAA base address
  313. CIAB        rs.w    $bfd000    ; CIAB base address
  314. PRA        rs.w    $000    ; Peripheral Data Register for port A
  315. PRB        rs.w    $100    ; Peripheral Data Register for port B
  316. DDRA        rs.w    $200    ; Data Direction Register A
  317. DDRB        rs.w    $300    ; Data Direction Register B
  318. TALO        rs.w    $400    ; Timer A Low Byte
  319. TAHI        rs.w    $500    ; Timer A High Byte
  320. TBLO        rs.w    $600    ; Timer B Low Byte
  321. TBHI        rs.w    $700    ; Timer B High Byte
  322. TODLO        rs.w    $800    ; TOD Counter Low Byte
  323. TODMID        rs.w    $900    ; TOD Counter Mid Byte
  324. TODHI        rs.w    $a00    ; TOD Counter High Byte
  325. TODHR        rs.w    $b00    ; Unused
  326. SDR        rs.w    $c00    ; Serial Data Register
  327. ICR        rs.w    $d00    ; Interrupt Control Register
  328. CRA        rs.w    $e00    ; Control Register A
  329. CRB        rs.w    $f00    ; Control Register B
  330.  
  331. ***********************************************************
  332. * Define the following for your coding stye:
  333. ;A5CUSTOM    SET    1    ; if a5 = $dff000
  334. ;A5CUSTOMPLUS2    SET    1    ; if a5 = $dff002
  335. ;A6CUSTOM    SET    1    ; if a6 = $dff000
  336. ;A6CUSTOMPLUS2    SET    1    ; if a6 = $dff002
  337. ;USEOS        SET    1    ; if you want to use graphics.library
  338.                 ; WaitBlit()
  339.  IFEQ        NOMACROS
  340.    IFND        WaitVblank
  341. WaitVblank    MACRO    \1
  342. .\@:
  343.    IFD        A5CUSTOM
  344.         move.l    4(a5),d0
  345.    ELSE
  346.      IFD    A5CUSTOMPLUS2
  347.         move.l    4-2(a5),d0
  348.      ELSE
  349.        IFD    A6CUSTOM
  350.         move.l    4(a6),d0
  351.        ELSE
  352.          IFD    A6CUSTOMPLUS2
  353.         move.l    4-2(a6),d0
  354.          ELSE
  355.         move.l    $dff004,d0
  356.          ENDIF
  357.        ENDIF
  358.      ENDIF
  359.    ENDIF
  360.         lsr.l    #8,d0
  361.         andi.w    #$3ff,d0
  362.         cmp.w    \1,d0
  363.         bne.b    .\@
  364.         ENDM
  365.    ENDIF
  366.  
  367.    IFND        WaitBlitter
  368. WaitBlitter    MACRO
  369.    IFD        USEOS
  370.         CALLGRAF    WaitBlit
  371.    ELSE
  372.      IFD    A5CUSTOM
  373.         tst.w    2(a5)
  374. .\@:        btst.b    #6,2(a5)
  375.         bne.b    .\@
  376.      ELSE
  377.        IFD    A5CUSTOMPLUS2
  378.         tst.w    (a5)
  379. .\@:        btst.b    #6,(a5)
  380.         bne.b    .\@
  381.        ELSE
  382.          IFD    A6CUSTOM
  383.         tst.w    2(a6)
  384. .\@:        btst.b    #6,2(a6)
  385.         bne.b    .\@
  386.          ELSE
  387.            IFD    A6CUSTOMPLUS2
  388.         tst.w    (a6)
  389. .\@:        btst.b    #6,(a6)
  390.         bne.b    .\@
  391.            ELSE
  392.         tst.w    $dff002
  393. .\@:        btst.b    #6,$dff002
  394.         bne.b    .\@
  395.        ENDIF
  396.      ENDIF
  397.        ENDIF
  398.      ENDIF
  399.    ENDIF
  400.         ENDM
  401.   ENDIF
  402.  
  403.  ENDIF        ; IFEQ    NOMACROS
  404.  
  405. ***********************************************************
  406. ; These are the lf-codes for the blitter.  With these equates you can
  407. ; do stuff like this:
  408. ;    move.w    #(LF_A!LF_C),bltcon0(a5)
  409. LF_A        SET    $f0
  410. LF_B        SET    $cc
  411. LF_C        SET    $aa
  412.  
  413. ; These are the DMA channel masks.  If you wanted set a blit up that uses
  414. ; channels A, B, and D, then you would use this:
  415. ;    move.w    #(DEST!SCRB!SRCA),bltcon0(a5)
  416.  IFND    HARDWARE_BLIT_I
  417. DEST        SET    $100
  418. SRCC        SET    $200
  419. SRCB        SET    $400
  420. SRCA        SET    $800
  421.  ENDC
  422.  
  423. ; These are the blitter mode flags.
  424.  IFND    HARDWARE_BLIT_I
  425. FILL_OR        SET    $8
  426. FILL_XOR    SET    $10
  427. FILL_CARRYIN    SET    $4
  428.  ENDC
  429. COPY        SET    $0
  430.  
  431. ; These are other special blitter flags.
  432.  IFND    HARDWARE_BLIT_I
  433. BLITREVERSE    SET    $2
  434.  ENDC
  435. BLITDOWN    SET    $0
  436. BLITMAXWIDTH    SET    $0
  437. BLITMAXHEIGHT    SET    $0
  438.  
  439. ; These are the shift value shifts.
  440.  IFND    HARDWARE_BLIT_I
  441. ASHIFTSHIFT    SET    12
  442. BSHIFTSHIFT    SET    12
  443.  ENDC
  444.  
  445. ; This is a macro that will set up bltcon0 and bltcon1 for you.  You
  446. ; must pass it immed. values.  It's a handy place to use the above
  447. ; equates. :)
  448. ;
  449. ; Example 1:
  450. ;     Say you wanted the values for a blit from A to D with no shifts.
  451. ;     Call it like this:
  452. ;        BlitCon    LF_A,SRCA,COPY,BLITDOWN,0,0,blitcon0(a5)
  453. ;
  454. ; Example 2:
  455. ;     Now you want to set up for a fill from A to D with a no shifts,
  456. ;     but you want the value put in d0.  Call it like this:
  457. ;        BlitCon    LF_A,SRCA,FILL_XOR,BLITREVERSE,0,0,d0
  458. ;
  459. ; Example 3:
  460. ;     Now you want to do a cookie cut with an A shift of 4 and a
  461. ;     B shift of 2.  Call like this:
  462. ;        BlitCon    ((LF_A&LF_B)!((~LF_A)&(LF_C))),SRCA!SRCB!SRCC,COPY,
  463. ;            BLITDOWN,4,2,blitcon0(a5)
  464.  
  465.  IFEQ    NOMACROS
  466. BlitCon        MACRO    ; \1 - word of lf values, \2 - DMA chanels,
  467.             ; \3 - blit mode, \4 - blit direction
  468.             ; \5 - a shift, \6 - b shift
  469.             ; \7 - destination
  470.         move.l    #(((\1)!(\2)!(DEST)!((\5)<<ASHIFTSHIFT))<<16)!((\3)!(\4)!((\6)<<BSHIFTSHIFT)),\7
  471.         ENDM
  472.  
  473. ; This macro takes the height and width of you blit and puts it in the nice
  474. ; form the blitter wants. :)
  475. ;
  476. ; Example 1:
  477. ;     You're blitting an area 30 words wide and 5 rasters high and you want
  478. ;     the blit to start now.  Call like this:
  479. ;        BlitSize    5,30,bltsize(a5)
  480. ;
  481. ; Example 2:
  482. ;     You're blitting an area 27 words by 200 rasters, but you want the size
  483. ;     in d6.  Call like this:
  484. ;        BlitSize    200,27,d6
  485. ;
  486. ; Example 3:
  487. ;     Now say you want a max size blit.  Call like this:
  488. ;        BlitSize    BLITMAXHEIGHT,BLITMAXWIDTH,blitsize(a5)
  489.  
  490. BlitSize    MACRO    ; \1 - height in rasters, \2 - width in words
  491.             ; \3 - destination
  492.    IFEQ    ((\2)&(~$3f))!((\1)&(~$3ff))    ; is blit too big?
  493.         move.w    #((\1)*64)+(\2),\3
  494.    ELSE                    ; yup.
  495.         FAIL            ; Blit size is too big!
  496.    ENDC
  497.         ENDM
  498.  
  499. ; This is a very special routine.  It MUST have immed. data as it's params
  500. ; and it will trash d0 or if \4 is specified, it will use that.
  501.  
  502. BlitSizeECS    MACRO    ; \1 - height in rasters, \2 - width in words,
  503.             ; \3 - ptr to bltsizv
  504.             ; \4 - scratch register (d0 is default)
  505.    IFEQ    NARG-3
  506.         move.w    #\1,d0
  507.         swap    d0
  508.         move.w    #\2,d0
  509.         move.l    d0,\3
  510.    ELSE
  511.         move.w    #\1,\4
  512.         swap    \4
  513.         move.w    #\2,\4
  514.         move.l    \4,\3
  515.    ENDC
  516.         ENDM
  517.  
  518.  ENDC    ;NOMACROS
  519.